Hibernate একটি শক্তিশালী Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশন এবং রিলেশনাল ডেটাবেসের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। Hibernate ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশনগুলির মাধ্যমে ডেটা ম্যানিপুলেট করতে সাহায্য করে। এখানে Hibernate CRUD Operations কিভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করা হয়েছে।
Create অপারেশন ডেটাবেসে নতুন রেকর্ড তৈরি করার জন্য ব্যবহৃত হয়। Hibernate এ নতুন অবজেক্ট তৈরি করা হলে, এটি ডেটাবেসে সেভ (insert) করার জন্য Session.save()
বা Session.persist()
মেথড ব্যবহার করা হয়।
ধরা যাক আমাদের একটি Employee
ক্লাস রয়েছে, এবং আমরা এটিকে ডেটাবেসে সেভ করতে চাই।
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String position;
// Constructors, Getters, and Setters
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class CreateEmployee {
public static void main(String[] args) {
// Step 1: Create SessionFactory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Step 2: Create session
Session session = factory.getCurrentSession();
try {
// Step 3: Create Employee object
Employee newEmployee = new Employee("John", "Developer");
// Step 4: Start a transaction
session.beginTransaction();
// Step 5: Save the employee object
session.save(newEmployee);
// Step 6: Commit the transaction
session.getTransaction().commit();
System.out.println("Employee saved with ID: " + newEmployee.getId());
} finally {
factory.close();
}
}
}
এখানে session.save()
ব্যবহার করা হয়েছে Employee অবজেক্ট ডেটাবেসে সেভ করার জন্য। যখন ট্রানজ্যাকশন কমিট হয়, তখন ডেটাবেসে নতুন রেকর্ড তৈরি হয়।
Read অপারেশন ডেটাবেস থেকে তথ্য রিট্রিভ করার জন্য ব্যবহৃত হয়। Hibernate-এ ডেটা রিড করার জন্য Session.get()
বা Session.load()
মেথড ব্যবহার করা যায়। HQL (Hibernate Query Language) বা Criteria API ব্যবহার করে জটিল কোয়েরিও তৈরি করা যেতে পারে।
ধরা যাক আমরা Employee টেবিল থেকে একটি Employee তথ্য রিট্রিভ করতে চাই।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class ReadEmployee {
public static void main(String[] args) {
// Step 1: Create SessionFactory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Step 2: Create session
Session session = factory.getCurrentSession();
try {
// Step 3: Start a transaction
session.beginTransaction();
// Step 4: Retrieve Employee based on the ID
Employee employee = session.get(Employee.class, 1);
// Step 5: Commit the transaction
session.getTransaction().commit();
System.out.println("Retrieved Employee: " + employee);
} finally {
factory.close();
}
}
}
এখানে session.get(Employee.class, 1)
ব্যবহার করে ID = 1 এর Employee রেকর্ড ডেটাবেস থেকে রিট্রিভ করা হচ্ছে।
Update অপারেশন ডেটাবেসে বিদ্যমান রেকর্ড আপডেট করতে ব্যবহৃত হয়। Hibernate-এ একটি অবজেক্টের properties পরিবর্তন করলে, Session.update()
বা session.saveOrUpdate()
মেথড ব্যবহার করে ডেটাবেসে সেই পরিবর্তনটি সেভ করা যায়।
ধরা যাক আমরা Employee টেবিলের একটি রেকর্ড আপডেট করতে চাই।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class UpdateEmployee {
public static void main(String[] args) {
// Step 1: Create SessionFactory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Step 2: Create session
Session session = factory.getCurrentSession();
try {
// Step 3: Start a transaction
session.beginTransaction();
// Step 4: Get employee with ID 1
Employee employee = session.get(Employee.class, 1);
employee.setPosition("Senior Developer");
// Step 5: Commit the transaction
session.getTransaction().commit();
System.out.println("Employee updated: " + employee);
} finally {
factory.close();
}
}
}
এখানে, session.get(Employee.class, 1)
ব্যবহার করে ID = 1 এর Employee রেকর্ডটি পাওয়া হয়েছে এবং তার position আপডেট করা হয়েছে। তারপর session.getTransaction().commit() এর মাধ্যমে পরিবর্তনগুলি ডেটাবেসে সেভ করা হয়েছে।
Delete অপারেশন ডেটাবেস থেকে কোনো রেকর্ড মুছে ফেলতে ব্যবহৃত হয়। Hibernate-এ ডেটাবেস থেকে রেকর্ড মুছে ফেলতে session.delete()
মেথড ব্যবহার করা হয়।
ধরা যাক আমরা Employee টেবিল থেকে একটি রেকর্ড মুছে ফেলতে চাই।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class DeleteEmployee {
public static void main(String[] args) {
// Step 1: Create SessionFactory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Step 2: Create session
Session session = factory.getCurrentSession();
try {
// Step 3: Start a transaction
session.beginTransaction();
// Step 4: Get the employee by id
Employee employee = session.get(Employee.class, 1);
// Step 5: Delete the employee
session.delete(employee);
// Step 6: Commit the transaction
session.getTransaction().commit();
System.out.println("Employee deleted: " + employee);
} finally {
factory.close();
}
}
}
এখানে, session.delete(employee)
ব্যবহার করে ID = 1 এর Employee রেকর্ডটি ডেটাবেস থেকে মুছে ফেলা হয়েছে।
Hibernate-এ CRUD Operations (Create, Read, Update, Delete) হল ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করার প্রধান উপায়। Hibernate আপনাকে Session ব্যবহার করে অবজেক্টগুলিকে ডেটাবেসে সেভ, রিট্রিভ, আপডেট এবং ডিলিট করতে সহায়ক এবং JPA ব্যবহারকারীদের জন্য একটি আধুনিক ORM সমাধান প্রদান করে। Hibernate এর এই CRUD অপারেশনগুলি Java ডেভেলপারদের জন্য ডেটাবেসের সাথে ম্যানিপুলেশন করার একটি সহজ এবং কার্যকরী পদ্ধতি প্রদান করে।
CRUD হল একটি অ্যাক্রোনিম যা Create, Read, Update, এবং Delete এর সংক্ষিপ্ত রূপ। এই চারটি মৌলিক অপারেশন একটি ডেটাবেস বা ডেটা স্টোরেজ সিস্টেমে অবজেক্ট ম্যানিপুলেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। Hibernate ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের মাধ্যমে এই CRUD অপারেশনগুলি সহজে এবং কার্যকরীভাবে সম্পন্ন করা যায়।
Hibernate-এ, CRUD অপারেশনগুলি Session অবজেক্ট ব্যবহার করে সম্পাদিত হয়, যা ডেটাবেসের সাথে সম্পর্ক স্থাপন করে এবং Java অবজেক্টের মাধ্যমে ডেটা ম্যানিপুলেট করতে সহায়তা করে।
save()
বা persist()
মেথড ব্যবহার করা হয়।get()
, load()
, এবং HQL (Hibernate Query Language) বা Criteria API ব্যবহার করা হয়।update()
বা saveOrUpdate()
মেথড ব্যবহার করে আপডেট করা হয়।delete()
মেথড ব্যবহার করা হয়।Hibernate-এ Create অপারেশনটি নতুন অবজেক্ট তৈরি করে ডেটাবেসে সেভ করার প্রক্রিয়া। এটি Session.save()
বা Session.persist()
মেথড দ্বারা সম্পন্ন করা হয়।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class CreateExample {
public static void main(String[] args) {
// Hibernate configuration and session factory setup
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create a session
Session session = factory.getCurrentSession();
try {
// Create new Employee object
Employee newEmployee = new Employee("John", "Doe", "developer");
// Start a transaction
session.beginTransaction();
// Save the employee object
session.save(newEmployee);
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, session.save(newEmployee)
মেথডের মাধ্যমে Employee অবজেক্টটি ডেটাবেসে সংরক্ষিত হচ্ছে।
Hibernate-এ Read অপারেশনটি ডেটাবেস থেকে ডেটা পড়তে ব্যবহৃত হয়। এটি session.get()
বা session.load()
মেথড দ্বারা করা যেতে পারে, অথবা HQL বা Criteria API ব্যবহার করে কুয়েরি চালানো যেতে পারে।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class ReadExample {
public static void main(String[] args) {
// Hibernate configuration and session factory setup
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create a session
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Retrieve employee based on the id
Employee employee = session.get(Employee.class, 1);
// Display the employee details
System.out.println("Employee: " + employee);
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, session.get(Employee.class, 1)
মেথডের মাধ্যমে Employee অবজেক্টের ID 1 দ্বারা ডেটাবেস থেকে রেকর্ড পড়া হচ্ছে।
Hibernate-এ Update অপারেশনটি বিদ্যমান রেকর্ড পরিবর্তন করতে ব্যবহৃত হয়। আপনি session.update()
অথবা session.saveOrUpdate()
মেথড ব্যবহার করতে পারেন।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class UpdateExample {
public static void main(String[] args) {
// Hibernate configuration and session factory setup
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create a session
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Retrieve employee based on the id
Employee employee = session.get(Employee.class, 1);
// Update the employee's information
employee.setFirstName("Jane");
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, employee.setFirstName("Jane")
এর মাধ্যমে Employee
অবজেক্টের প্রথম নাম পরিবর্তন করা হয়েছে এবং session.getTransaction().commit()
দিয়ে এটি ডেটাবেসে আপডেট করা হয়েছে।
Hibernate-এ Delete অপারেশনটি ডেটাবেস থেকে একটি রেকর্ড মুছে ফেলার জন্য ব্যবহৃত হয়। session.delete()
মেথড ব্যবহার করে এটি করা হয়।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class DeleteExample {
public static void main(String[] args) {
// Hibernate configuration and session factory setup
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
// Create a session
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Retrieve employee based on the id
Employee employee = session.get(Employee.class, 1);
// Delete the employee
session.delete(employee);
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
এখানে, session.delete(employee)
মেথড ব্যবহার করে Employee অবজেক্টটি ডেটাবেস থেকে মুছে ফেলা হয়েছে।
Hibernate দিয়ে CRUD অপারেশন পরিচালনা সহজ এবং কার্যকরী হয়। এটি Java অবজেক্টের সাথে ডেটাবেস টেবিলের সংযোগ স্থাপন এবং ডেটা ম্যানিপুলেশনকে অত্যন্ত সহজ করে তোলে। Hibernate এর মাধ্যমে আপনি ডেটাবেসের অপারেশনগুলি স্বয়ংক্রিয়ভাবে এবং মডুলারভাবে পরিচালনা করতে পারেন।
Hibernate দিয়ে Data Insert (Create) অপারেশন বাস্তবায়ন করা খুবই সহজ এবং কার্যকরী। Hibernate ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের মাধ্যমে আপনি ডাটাবেসে ডেটা ইনসার্ট করতে পারবেন এবং এটি ক্লাস এবং টেবিলের মধ্যে সম্পর্ক তৈরি করবে।
নিচে Hibernate ব্যবহার করে Data Insert (Create) করার জন্য প্রয়োজনীয় ধাপগুলো ব্যাখ্যা করা হয়েছে:
Hibernate এর কনফিগারেশন ফাইলটি ডাটাবেসের সংযোগ তথ্য, ডায়ালেক্ট, ডাটাবেসের ইউজারনেম এবং পাসওয়ার্ড, হাইবারনেটের সেটিংস ইত্যাদি ধারণ করে।
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<!-- JDBC connection pool settings -->
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<!-- Specify the dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="hibernate.show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mention annotated class -->
<mapping class="com.example.hibernate.MyEntity"/>
</session-factory>
</hibernate-configuration>
এখানে, hibernate.cfg.xml ফাইলে ডাটাবেস কনফিগারেশন সহ Hibernate এর অন্যান্য প্রপার্টি উল্লেখ করা হয়েছে। এখানে <mapping class="com.example.hibernate.MyEntity"/>
দ্বারা MyEntity
ক্লাসকে টেবিলের সাথে সম্পর্কিত করা হয়েছে।
Hibernate Entity ক্লাসে, @Entity
অ্যানোটেশন ব্যবহার করা হয়, যা Hibernate কে জানায় যে এটি একটি জাভা ক্লাস যা একটি ডাটাবেস টেবিলের সাথে সম্পর্কিত।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // Auto increment ID
private int id;
private String name;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
এখানে:
@Entity
: এই অ্যানোটেশনটি নির্দেশ করে যে MyEntity
একটি JPA Entity।@Id
: এটি টেবিলের প্রাইমারি কী ফিল্ড নির্দেশ করে।@GeneratedValue
: এটি প্রাইমারি কী ফিল্ডের জন্য স্বয়ংক্রিয়ভাবে ভ্যালু তৈরি করতে ব্যবহৃত হয়।এখন আমরা Session এবং Transaction ব্যবহার করে ডাটাবেসে ডেটা ইনসার্ট করবো। SessionFactory ব্যবহার করে Session তৈরি করা হয়, এবং একটি Transaction চালু করে ডেটা ইনসার্ট করা হয়।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class MyDAO {
private SessionFactory sessionFactory;
public MyDAO(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void saveEntity(MyEntity entity) {
// Session তৈরি করা
Session session = sessionFactory.getCurrentSession();
// Transaction শুরু করা
Transaction transaction = session.beginTransaction();
try {
// Entity সেভ করা
session.save(entity);
// Transaction কমিট করা
transaction.commit();
System.out.println("Entity saved successfully");
} catch (Exception e) {
// Exception হলে Rollback করা
if (transaction != null) {
transaction.rollback();
}
e.printStackTrace();
}
}
}
এখানে:
session.save(entity)
দিয়ে MyEntity
অবজেক্টটি ডাটাবেসে সেভ করা হচ্ছে।এখন, Guice বা সাধারণভাবে Hibernate ব্যবহার করে SessionFactory
তৈরি করা এবং MyDAO
ব্যবহার করে ডেটা ইনসার্ট করা হবে।
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class MainApp {
public static void main(String[] args) {
// SessionFactory তৈরি করা
SessionFactory sessionFactory = new Configuration().configure().addAnnotatedClass(MyEntity.class).buildSessionFactory();
// MyDAO ক্লাস ইনস্ট্যান্স তৈরি করা
MyDAO dao = new MyDAO(sessionFactory);
// MyEntity অবজেক্ট তৈরি করা এবং সেভ করা
MyEntity entity = new MyEntity();
entity.setName("John Doe");
// ডেটা সেভ করা
dao.saveEntity(entity);
// SessionFactory বন্ধ করা
sessionFactory.close();
}
}
এখানে, MyEntity
অবজেক্টের name
প্রপার্টি ইনপুট দেওয়া হয়েছে এবং তা MyDAO
ক্লাসের saveEntity()
মেথডের মাধ্যমে ডাটাবেসে সেভ করা হয়েছে।
যদি আপনার hibernate.cfg.xml কনফিগারেশন ফাইলটি ঠিকভাবে কনফিগার করা থাকে, তাহলে Hibernate কনসোলের আউটপুট হিসেবে SQL স্টেটমেন্ট দেখাবে এবং টেবিলের মধ্যে ডেটা ইনসার্ট হবে:
Hibernate: insert into MY_ENTITY (NAME) values (?)
Entity saved successfully
Hibernate ব্যবহার করে Data Insert (Create) অপারেশন করা খুবই সহজ। উপরের স্টেপগুলিতে:
Hibernate ORM ডাটাবেসের সাথে জাভা অবজেক্টগুলির সম্পর্ক সহজে তৈরি করে এবং CRUD (Create, Read, Update, Delete) অপারেশন করতে সহায়ক হয়।
Hibernate ORM (Object-Relational Mapping) ফ্রেমওয়ার্কের মাধ্যমে ডাটাবেস থেকে ডেটা রিট্রিভ (Retrieve) বা পড়ার প্রক্রিয়া খুবই সহজ এবং কার্যকরী। Hibernate ডেটাবেসের সাথে সম্পর্কিত অবজেক্টগুলির মধ্যে ম্যাপিং করে, এবং আপনি বিভিন্ন CRUD (Create, Read, Update, Delete) অপারেশন করতে পারবেন, যেখানে Read অপারেশনটি ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়।
Hibernate-এ ডেটা রিট্রিভ করার জন্য সাধারণত Session অবজেক্ট ব্যবহার করা হয়, যা ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করে এবং অবজেক্টগুলিকে রিটার্ন করে। এখানে বিভিন্ন পদ্ধতিতে ডেটা রিট্রিভ করার বিস্তারিত আলোচনা করা হলো।
Session.get()
MethodSession.get()
মেথড ব্যবহার করে নির্দিষ্ট ID-এর মাধ্যমে একটি অবজেক্ট রিট্রিভ করা যায়। এটি primary key দ্বারা রেকর্ড রিট্রিভ করে।
Session.get()
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class RetrieveExample {
public static void main(String[] args) {
// Step 1: Create session factory and session
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Step 2: Create a new Employee object
int employeeId = 1;
// Step 3: Retrieve the Employee based on the ID
session.beginTransaction();
Employee employee = session.get(Employee.class, employeeId);
// Step 4: Display the retrieved employee
System.out.println("Retrieved Employee: " + employee);
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
session.get(Employee.class, employeeId)
: এখানে get()
মেথডটি Employee
অবজেক্ট রিটার্ন করে, যেখানে employeeId
হল primary key। এটি রিট্রিভ করার জন্য ডাটাবেসের টেবিল থেকে সঠিক সারি খুঁজে বের করে।Session.createQuery()
with HQL (Hibernate Query Language)Hibernate Query Language (HQL) ব্যবহার করে আরও জটিল কুয়েরি তৈরি করা সম্ভব। HQL SQL-এর মতোই দেখতে, কিন্তু এটি জাভা অবজেক্টগুলির জন্য ডিজাইন করা। createQuery()
মেথডের মাধ্যমে আপনি HQL কুয়েরি চালাতে পারেন।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import java.util.List;
public class RetrieveExample {
public static void main(String[] args) {
// Step 1: Create session factory and session
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Step 2: Create a HQL query to retrieve all employees
session.beginTransaction();
Query<Employee> query = session.createQuery("from Employee", Employee.class);
// Step 3: Execute the query and get result list
List<Employee> employees = query.getResultList();
// Step 4: Display the results
for (Employee emp : employees) {
System.out.println(emp);
}
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
session.createQuery("from Employee", Employee.class)
: এখানে createQuery()
মেথডটি HQL কুয়েরি তৈরি করে যা Employee
টেবিলের সমস্ত রেকর্ড রিট্রিভ করবে।query.getResultList()
: এটি HQL কুয়েরি চালিয়ে সমস্ত Employee
অবজেক্টের লিস্ট রিটার্ন করে।Session.createCriteria()
(Deprecated in Latest Versions)Hibernate এর পুরানো ভার্সনে Criteria
API ব্যবহার করা হত ডেটা রিট্রিভ করার জন্য। তবে, বর্তমানে Hibernate 5 এবং পরবর্তী ভার্সনগুলিতে Criteria
API পুরানো হিসেবে চিহ্নিত হয়েছে এবং এর পরিবর্তে JPA Criteria API
ব্যবহৃত হচ্ছে।
Criteria
(Hibernate 4.x or older)import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.CriteriaQuery;
import java.util.List;
public class RetrieveExample {
public static void main(String[] args) {
// Step 1: Create session factory and session
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Step 2: Create a Criteria query to retrieve employees
session.beginTransaction();
List<Employee> employees = session.createCriteria(Employee.class).list();
// Step 3: Display the results
for (Employee emp : employees) {
System.out.println(emp);
}
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
session.createCriteria(Employee.class).list()
: এটি Criteria
API ব্যবহার করে Employee
টেবিলের সব রেকর্ড রিট্রিভ করে।Session.createNativeQuery()
(SQL Queries)Hibernate এ native SQL queries ব্যবহার করার মাধ্যমে সরাসরি SQL কুয়েরি চালানো যেতে পারে। এটি Hibernate এর মাধ্যমে ডাটাবেসের সাথে সরাসরি SQL ইন্টারঅ্যাকশন করার জন্য ব্যবহৃত হয়।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.NativeQuery;
import java.util.List;
public class RetrieveExample {
public static void main(String[] args) {
// Step 1: Create session factory and session
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Step 2: Create a native SQL query to retrieve employees
session.beginTransaction();
String sql = "SELECT * FROM employee";
NativeQuery<Employee> query = session.createNativeQuery(sql, Employee.class);
// Step 3: Execute the query and get result list
List<Employee> employees = query.getResultList();
// Step 4: Display the results
for (Employee emp : employees) {
System.out.println(emp);
}
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
session.createNativeQuery(sql, Employee.class)
: এটি native SQL কুয়েরি ব্যবহার করে employee
টেবিল থেকে সমস্ত ডেটা রিট্রিভ করে এবং Employee
ক্লাসে মাপসই করে।Hibernate এর মাধ্যমে ডেটা রিট্রিভ করার কয়েকটি পদ্ধতি রয়েছে, যেমন:
Session.get()
Method: একটি নির্দিষ্ট primary key দ্বারা অবজেক্ট রিটার্ন করা হয়।এই সব পদ্ধতি Hibernate ব্যবহারকারীদের ডেটাবেস থেকে ডেটা রিট্রিভ করার জন্য শক্তিশালী এবং নমনীয় উপায় প্রদান করে।
Hibernate হল একটি Java ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা Java অবজেক্টগুলোকে ডেটাবেস টেবিলের সাথে ম্যাপ করতে এবং ডেটাবেস অপারেশনগুলোকে সহজ ও কার্যকরভাবে সম্পাদন করতে সাহায্য করে। Hibernate ব্যবহার করে আপনি সহজেই Data Update এবং Data Delete অপারেশনগুলো করতে পারেন।
এখানে, Hibernate এর মাধ্যমে Data Update এবং Data Delete কিভাবে করা যায়, তার উদাহরণসহ বিস্তারিত আলোচনা করা হয়েছে।
Hibernate-এ Data Update করার জন্য Session এর মাধ্যমে আপনি merge() অথবা update() মেথড ব্যবহার করতে পারেন। সাধারণত, merge() বেশি ব্যবহৃত হয় কারণ এটি ডেটাবেসের সাথে সিনক্রোনাইজ করা হয় এবং এটি যদি কোনো অবজেক্টের পরিবর্তন না হয় তবে নতুন অবজেক্ট হিসেবে যুক্ত করে।
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Student {
@Id
private int id;
private String name;
private String course;
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
}
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
sessionFactory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Student.class)
.buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class StudentUpdateApp {
public static void main(String[] args) {
// Get the session factory
SessionFactory factory = HibernateUtil.getSessionFactory();
// Get the session from session factory
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Retrieve the student based on the id
int studentId = 1;
Student student = session.get(Student.class, studentId);
// Update the student's information
if (student != null) {
student.setName("John Doe");
student.setCourse("Advanced Java");
}
// Commit the transaction to update the data
session.getTransaction().commit();
System.out.println("Student updated successfully!");
} finally {
factory.close();
}
}
}
session.get(Student.class, studentId)
: এটি Student অবজেক্টটি ডেটাবেস থেকে এনে দেয় যেটি নির্দিষ্ট studentId
দিয়ে চিহ্নিত।student.setName()
এবং student.setCourse()
ব্যবহার করে ছাত্রের নাম এবং কোর্স আপডেট করা হয়।session.getTransaction().commit()
: এই মেথডটি ট্রানজেকশন কমিট করে, ডেটাবেসে পরিবর্তনগুলি সেভ করা হয়।merge()
Method:session.merge(student); // It saves or updates the student, if exists.
merge()
মেথডটি ডেটাবেসে অবজেক্টের পরিবর্তন সিঙ্ক্রোনাইজ করে এবং সঠিকভাবে আপডেট করে।
Hibernate-এ Data Delete করার জন্য delete()
মেথড ব্যবহার করা হয়। এটি সেশন থেকে অবজেক্টকে মুছে ফেলে এবং ডেটাবেসে সেই রেকর্ডটি মুছে ফেলা হয়।
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
public class StudentDeleteApp {
public static void main(String[] args) {
// Get the session factory
SessionFactory factory = HibernateUtil.getSessionFactory();
// Get the session from session factory
Session session = factory.getCurrentSession();
try {
// Start a transaction
session.beginTransaction();
// Retrieve the student based on the id
int studentId = 1;
Student student = session.get(Student.class, studentId);
// Delete the student if exists
if (student != null) {
session.delete(student);
}
// Commit the transaction to delete the data
session.getTransaction().commit();
System.out.println("Student deleted successfully!");
} finally {
factory.close();
}
}
}
session.get(Student.class, studentId)
: প্রথমে studentId
ব্যবহার করে ডেটাবেস থেকে Student
অবজেক্ট রিট্রিভ করা হয়।session.delete(student)
: এরপর delete()
মেথড ব্যবহার করে সেই অবজেক্টটি মুছে ফেলা হয়।session.getTransaction().commit()
: টানজেকশন কমিট করে ডেটাবেসে পরিবর্তনটি বাস্তবায়িত হয়।Hibernate Query Language (HQL) ব্যবহার করে ডেটা ডিলিট করা যায়:
session.createQuery("delete from Student where id=1").executeUpdate();
এই কোডটি id=1
সহ সমস্ত Student রেকর্ড ডিলিট করবে।
Hibernate সেশনগুলির মাধ্যমে Data Update এবং Data Delete অপারেশন পরিচালনা করার সময় Transaction Management খুবই গুরুত্বপূর্ণ। আপনি Transaction এর মাধ্যমে নিশ্চিত করতে পারেন যে, ডেটাবেসে অপারেশনগুলি সঠিকভাবে সম্পন্ন হচ্ছে।
session.beginTransaction()
– এটি ট্রানজেকশন শুরু করে।session.getTransaction().commit()
– এটি ট্রানজেকশন সম্পন্ন করে এবং ডেটাবেসে পরিবর্তন সংরক্ষণ করে।session.getTransaction().rollback()
– যদি কোনো ত্রুটি হয়, তবে এটি ডেটাবেসের পরিবর্তন পূর্বাবস্থায় ফিরিয়ে নিয়ে আসে।এখানে try-catch ব্লক ব্যবহৃত হয়েছে যাতে যদি কোনো ত্রুটি ঘটে তবে ট্রানজেকশন rollback করা যায়। যেমন:
try {
session.beginTransaction();
// Operation: Update/Delete
session.getTransaction().commit();
} catch (Exception e) {
if (session.getTransaction() != null) {
session.getTransaction().rollback(); // Rollback in case of error
}
e.printStackTrace();
} finally {
factory.close();
}
Hibernate ব্যবহার করে Data Update এবং Data Delete অপারেশন অত্যন্ত সহজ এবং কার্যকরী। Session ব্যবহার করে আপনি সহজেই ডেটাবেসে Insert, Update, এবং Delete করতে পারেন। merge()
এবং delete()
মেথডগুলি খুবই শক্তিশালী এবং কার্যকরী। ডেটাবেস ট্রানজেকশন ব্যবস্থাপনা সঠিকভাবে প্রয়োগ করা হয় এবং প্রয়োজন হলে rollback করা যায় যদি কোনো ত্রুটি ঘটে।
Read more